package com.LeetCode.dp.shares;

import org.junit.Test;

import java.awt.print.Pageable;

/**
 * 买卖股票 Ⅱ 可以多次买卖
 */
public class shares_2 {

    public int maxProfit2(int[] prices){
        int len = prices.length;
        int[][] dp = new int[len][2];

        //第一天不持有股票的利润为 0
        dp[0][0] = 0;
        //第一天持有股票的利润为 -prices[0]
        dp[0][1] = -prices[0];

        for(int i = 1; i<len; i++){
            //第 i 天不持有股票的利润 来自于状态 上一天也不持有 ： 上天的持有，今天卖了
            dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1] + prices[i]);
            //第 i 天持有股票的利润 来自于状态 上一天持有 ： 上一天不持有，今天买了
            dp[i][1] = Math.max(dp[i-1][0] - prices[i], dp[i-1][1]);
        }
        //最后一天卖了才有利润可言
        return dp[len - 1][0];
    }

    /**
     * 贪心法
     * 每次都是低买高卖，就像那种每次都赚钱的短期神仙
     */
    public int maxProfit2_greedy(int[] prices){
        int ans = 0;
        int len = prices.length;
        for(int i = 1; i<len; i++){
             ans = prices[i] > prices[i-1] ? ans + prices[i] - prices[i-1] : ans;
        }
        return ans;
    }

    @Test
    public void test(){
        int[] prices = {7,1,5,3,6,4};
        System.out.println(maxProfit2(prices));
    }

}
